/**
 * API相关类型定义
 */

// ============= 用户认证相关 =============

// 用户注册请求
export interface AppUserRegisterDto {
  userName: string;
  email: string;
  password: string;
}

// 用户注册响应
export interface AppUserRegisterVo {
  message: string;
  token: string;
  userId: number;
  userName: string;
  email: string;
  nickName?: string;
  avatar?: string;
}

// 邮箱密码登录请求
export interface EmailPasswordLoginDto {
  email: string;
  password: string;
}

// Google登錄请求
export interface GoogleLoginDto {
  idToken: string;
}

// Apple登录请求
export interface AppleLoginDto {
  idToken: string;
}

// 检查结果响应
export interface CheckResultVo {
  exists: boolean;
  value: string;
  code: string;
  message: string;
  type: string;
}

// ============= 个人资料相关 =============

// 用户资料更新请求
export interface UserProfileUpdateDto {
  nickName?: string;
  avatar?: string;
  merchantName?: string;
  businessName?: string;
  mentorName?: string;
}

// 用户资料响应
export interface UserProfileVo {
  userId: number;
  nickName?: string;
  avatar?: string;
  merchant: boolean;
  mentor: boolean;
  displayName?: string;
  userType: 'merchant' | 'mentor' | 'none';
  auditState?: number; // 审核状态（0待审核 1审核通过 2审核拒绝）
  auditStateText?: string;
  accountStatus?: number; // 账号状态（0正常 1停用 2未确认）
}

// ============= 身体数据相关 =============

// 身体数据业务对象
export interface UserBodyDataBo {
  id?: number;
  userId?: number;
  height?: number; // 身高(cm)
  weight?: number; // 体重(kg)
  birthday?: string; // 出生日期
}

// 身体数据视图对象
export interface UserBodyDataVo {
  id: number;
  userId: number;
  height?: number;
  weight?: number;
  birthday?: string;
}

// ============= 运动记录相关 =============

// 运动记录业务对象
export interface UserExerciseBo {
  id?: number;
  userId?: number;
  type: string; // 运动内容
  time: string; // 运动时间
  duration: number; // 运动时长(分钟)
}

// 运动记录视图对象
export interface UserExerciseVo {
  id: number;
  userId: number;
  type: string;
  time: string;
  duration: number;
  createTime: string;
}

// ============= AI聊天相关 =============

// AI聊天请求
export interface AiChatRequestDto {
  question: string;
  sessionId?: number;
}

// AI聊天响应
export interface AiChatResponseDto {
  answer: string;
  messageId: number;
  sessionId: number;
}

// 聊天消息视图对象
export interface ChatMessageVo {
  id: number;
  userId: number;
  sessionId: number;
  content: string;
  role: string; // 对话角色
  deductCost?: number;
  totalTokens?: number;
  modelName?: string;
  remark?: string;
  createTime: string;
}

// ============= 导师信息相关 =============

// 导师信息添加请求
export interface MentorAddDto {
  name: string; // 导师姓名
  tel: string; // 导师电话
  credentials: string; // 导师资格
  credentialsFiles?: string; // 导师资格文件
  idCard: string; // 导师身份证号
  idCardFiles: string; // 导师身份证文件
  certificateFiles?: string; // 教练证书
}

// 导师信息添加响应
export interface MentorAddVo {
  id: number;
  userId: number;
  createTime: string;
  message: string;
}

// ============= 商家信息相关 =============

// 商家信息添加请求
export interface MerchantAddDto {
  name: string; // 商家姓名
  businessName: string; // 商家名称
  tel: string; // 联系电话
  credentials: string; // 身份证号
  credentialsFiles?: string; // 身份证照片文件
  businessLicense: string; // 营业执照号
  businessLicenseFiles?: string; // 营业执照照片文件
  certificateFiles?: string; // 其他证书文件
  remark?: string; // 备注
}

// 商家信息添加响应
export interface MerchantAddVo {
  id: number;
  userId: number;
  createTime: string;
  message: string;
}

// ============= 课程管理相关 =============

// 课程新增请求
export interface CourseAddDto {
  title: string; // 课程标题
  content?: string; // 课程内容
  introduction?: string; // 课程介绍
  coverImage?: string; // 课程封面
  price: string; // 收费价格 (字符串格式)
  startDate: string; // 课程开始日期(yyyy-MM-dd)
  endDate: string; // 课程结束日期(yyyy-MM-dd)
  startTime: string; // 课程开始时间(HH:mm:ss)
  endTime: string; // 课程结束时间(HH:mm:ss)
  isPublished: string; // 是否上架 ("0"未上架, "1"已上架)
  maxStudents: number; // 最大学生数量
  currentStudents: number; // 当前学生数量
  publisherType: string; // 发布者类型 ("0"等)
}

// 课程视图对象
export interface CourseVo {
  id: number;
  title: string;
  content?: string;
  introduction?: string;
  coverImage?: string;
  price: string; // 价格改为字符串格式
  startDate: string;
  endDate: string;
  startTime: string;
  endTime: string;
  isPublished: string; // 是否上架
  maxStudents: number;
  currentStudents: number;
  publisherType: string;
  courseType: string; // 课程类型 ("0"=单人课, "1"=团体课)
  createTime?: string;
  updateTime?: string;
}

// ============= 文件上传相关 =============

// 文件上传响应
export interface FileUploadVo {
  fileId: number;
  url: string;
  fileName: string;
  originalFileName: string;
  fileSize: number;
  fileExtension: string;
  contentType: string;
  uploadTime: string;
  userId: number;
}
